/**
 * 环境判断工具
 * 帮助识别当前运行环境（开发/生产/测试）
 */

/**
 * 环境类型枚举
 */
export const ENV_TYPES = {
	DEVELOPMENT: 'development',
	PRODUCTION: 'production',
	TEST: 'test'
}

/**
 * 环境判断类
 */
class EnvHelper {
	constructor() {
		this.currentEnv = this.detectEnvironment()
	}
	
	/**
	 * 检测当前运行环境
	 * @returns {string} 环境类型
	 */
	detectEnvironment() {
		// 方法1：通过uni-app编译条件判断
		// #ifdef MP-WEIXIN
		return this.detectWechatEnvironment()
		// #endif
		
		// #ifdef H5
		return this.detectH5Environment()
		// #endif
		
		// #ifdef APP-PLUS
		return this.detectAppEnvironment()
		// #endif
		
		// 默认返回生产环境
		return ENV_TYPES.PRODUCTION
	}
	
	/**
	 * 检测微信小程序环境
	 * @returns {string} 环境类型
	 */
	detectWechatEnvironment() {
		try {
			// 获取小程序信息
			const accountInfo = uni.getAccountInfoSync()
			
			// 检查是否为开发版
			if (accountInfo.miniProgram.envVersion === 'develop') {
				return ENV_TYPES.DEVELOPMENT
			}
			
			// 检查是否为体验版
			if (accountInfo.miniProgram.envVersion === 'trial') {
				return ENV_TYPES.TEST
			}
			
			// 检查是否为正式版
			if (accountInfo.miniProgram.envVersion === 'release') {
				return ENV_TYPES.PRODUCTION
			}
			
			// 如果无法获取版本信息，默认为开发环境
			return ENV_TYPES.DEVELOPMENT
			
		} catch (error) {
			console.warn('⚠️ 无法获取微信小程序环境信息:', error)
			// 在微信开发者工具中，通常为开发环境
			return ENV_TYPES.DEVELOPMENT
		}
	}
	
	/**
	 * 检测H5环境
	 * @returns {string} 环境类型
	 */
	detectH5Environment() {
		// 检查URL中的环境标识
		const hostname = window.location.hostname
		const port = window.location.port
		
		// 本地开发环境
		if (hostname === 'localhost' || hostname === '127.0.0.1') {
			return ENV_TYPES.DEVELOPMENT
		}
		
		// 测试环境（通常包含test、staging等关键词）
		if (hostname.includes('test') || hostname.includes('staging')) {
			return ENV_TYPES.TEST
		}
		
		// 生产环境
		return ENV_TYPES.PRODUCTION
	}
	
	/**
	 * 检测APP环境
	 * @returns {string} 环境类型
	 */
	detectAppEnvironment() {
		// APP环境通常通过配置文件或编译时确定
		// 这里可以根据实际需求进行配置
		return ENV_TYPES.PRODUCTION
	}
	
	/**
	 * 获取当前环境
	 * @returns {string} 环境类型
	 */
	getCurrentEnv() {
		return this.currentEnv
	}
	
	/**
	 * 判断是否为开发环境
	 * @returns {boolean}
	 */
	isDevelopment() {
		return this.currentEnv === ENV_TYPES.DEVELOPMENT
	}
	
	/**
	 * 判断是否为生产环境
	 * @returns {boolean}
	 */
	isProduction() {
		return this.currentEnv === ENV_TYPES.PRODUCTION
	}
	
	/**
	 * 判断是否为测试环境
	 * @returns {boolean}
	 */
	isTest() {
		return this.currentEnv === ENV_TYPES.TEST
	}
	
	/**
	 * 获取环境配置
	 * @returns {Object} 环境配置对象
	 */
	getEnvConfig() {
		const configs = {
			[ENV_TYPES.DEVELOPMENT]: {
				showDebugButtons: true,
				showConsoleLogs: true,
				//apiBaseUrl: 'http://localhost:3000',
				apiBaseUrl: 'https://api.weixin.qq.com',
				enableMockData: true
			},
			[ENV_TYPES.TEST]: {
				showDebugButtons: false,
				showConsoleLogs: true,
				apiBaseUrl: 'https://test-api.yourdomain.com',
				enableMockData: false
			},
			[ENV_TYPES.PRODUCTION]: {
				showDebugButtons: false,
				showConsoleLogs: false,
				apiBaseUrl: 'https://api.yourdomain.com',
				enableMockData: false
			}
		}
		
		return configs[this.currentEnv] || configs[ENV_TYPES.PRODUCTION]
	}
	
	/**
	 * 打印环境信息（调试用）
	 */
	printEnvInfo() {
		const config = this.getEnvConfig()
		console.log('🌍 环境信息:', {
			环境类型: this.currentEnv,
			显示调试按钮: config.showDebugButtons,
			显示控制台日志: config.showConsoleLogs,
			API基础地址: config.apiBaseUrl,
			启用模拟数据: config.enableMockData
		})
	}
}

// 创建单例实例
const envHelper = new EnvHelper()

export default envHelper
export { EnvHelper } 